/**
 * 数据库连接
 */
import mongoose from 'mongoose'
import config from './index.js'
import log4js from '../utils/log4js.js'

// 设置连接选项
const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  serverSelectionTimeoutMS: 5000, // 服务器选择超时
  socketTimeoutMS: 45000, // 套接字超时
}

// 连接数据库
const connectDB = async () => {
  try {
    await mongoose.connect(config.URL, options)
    log4js.info('MongoDB连接成功')
    console.log('MongoDB连接成功')
  } catch (err) {
    log4js.error(`MongoDB连接失败: ${err.message}`)
    log4js.error(err.stack)
    console.error('MongoDB连接失败:', err)
    
    // 如果是开发环境，尝试重新连接
    if (process.env.NODE_ENV !== 'production') {
      log4js.info('尝试重新连接数据库...')
      setTimeout(connectDB, 5000) // 5秒后重试
    }
  }
}

// 监听连接事件
mongoose.connection.on('disconnected', () => {
  log4js.error('MongoDB连接断开，尝试重新连接...')
  connectDB()
})

// 初始连接
connectDB()